home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 4 / Meeting Pearls Vol. IV (1996)(GTI - Schatztruhe)[!].iso / Pearls / util / misc / CyberCron / Source / DoMsg.a < prev    next >
Text File  |  1992-09-29  |  2KB  |  171 lines

  1.  INCLUDE "exec/types.i"
  2.  INCLUDE "rexx/rxslib.i"
  3.  
  4. MSGBUFSIZE equ 18
  5.  
  6.     XDEF @DoMsg
  7.  
  8.     XREF ___ctype
  9.     XREF _RexxSysBase
  10.     XREF __CXM33
  11.     XREF _LVOReplyMsg
  12.     XREF _AbsExecBase
  13.  
  14.     SECTION DoMsg,CODE
  15.  
  16. ; this code is the dispatcher for ARexx messages.  It has been moved
  17. ; to assembly to allow use of registerized parameters and to optimize it by
  18. ; hand a bit.  It takes as its arguments:
  19. ;
  20. ;    A0 = pointer to ARexx message
  21. ;    A1 = pointer to CmdTbl
  22. ;    D0 = Number of ARexx commands
  23. ;    D1 = BringerDown flag
  24.  
  25. @DoMsg
  26.     link    a5,#-MSGBUFSIZE-4
  27.     movem.l    d5-d7/a2-a3/a6,-(sp)
  28.  
  29.     movea.l a0,a3
  30.     movea.l    a1,a2
  31.     move.l    d0,d7
  32.     move.l    d1,d6
  33.  
  34.     movea.l    _RexxSysBase(a4),a6
  35.     jsr    _LVOIsRexxMsg(a6)
  36.     tst.l    d0
  37.     beq.w    DMAcleanup
  38.  
  39. 2$    moveq    #20,d0
  40.     move.l    d0,rm_Result1(a3)
  41.     clr.l    rm_Result2(a3)
  42.  
  43.     tst.w    d6    ; BringerDown ?
  44.     beq.s    3$
  45.  
  46.     moveq    #22,d0
  47.     move.l    d0,rm_Result1(a3)
  48.     bra.w    DMAcleanup
  49.  
  50. 3$    lea    -(MSGBUFSIZE+4)(a5),a0
  51.     movea.l    rm_Args(a3),a1
  52.     moveq    #MSGBUFSIZE,d0
  53.     jsr    _LVOStrcpyU(a6)
  54.  
  55.     moveq    #0,d6
  56. 4$    cmp.l    d7,d6
  57.     bge.s    5$
  58.  
  59.     move.l    d6,d0
  60.     moveq    #$0e,d1
  61.     jsr    __CXM33(pc)
  62.     move.w    00(a2,d0.l),d1
  63.     ext.l    d1
  64.     lea    -(MSGBUFSIZE+4)(a5),a0
  65.     movea.l    02(a2,d0.l),a1
  66.     move.l    d1,d0
  67.     jsr    _LVOStrcmpN(a6)
  68.     tst.l    d0
  69.     beq.s    5$
  70.     addq.l    #1,d6
  71.     bra.s    4$
  72.  
  73. 5$    cmp.l    d7,d6
  74.     bge.w    DMAcleanup
  75.  
  76.     move.l    d6,d0
  77.     moveq    #$0e,d1
  78.     jsr    __CXM33(pc)
  79.     move.l    d0,d7
  80.     movea.l    rm_Args(a3),a1
  81.     adda.w    00(a2,d7.l),a1
  82.     lea    1(a1),a1
  83.     movem.l    a1,-4(a5)
  84.  
  85.     move.w    6(a2,d7.l),d1
  86.     cmpi.b    #3,d1
  87.     bne.s    6$
  88.  
  89.     movea.l    a3,a0
  90.     movea.l    10(a2,d7.l),a1
  91.     jsr    (a1)
  92.     bra.s    DMAreturn
  93.  
  94. 6$    cmpi.b    #2,d1
  95.     bne.s    7$
  96.  
  97.     movem.l    -4(a5),a0
  98.     jsr    _LVOCVa2i(a6)
  99.     movea.l    10(a2,d7.l),a1
  100.     jsr    (a1)
  101.     bra.s    DMAreturn
  102.  
  103. 7$    cmpi.b    #1,d1
  104.     bne.s    9$
  105.  
  106.     movem.l    -4(a5),a0
  107.     lea    ___ctype+1(a4),a1
  108.     moveq    #8,d5
  109. 8$    move.b    (a0),d0
  110.     ext.w    d0
  111.     ext.l    d0
  112.     move.b    0(a1,d0.l),d0
  113.     ext.w    d0
  114.     ext.l    d0
  115.     and.l    d5,d0
  116.     beq.s    9$
  117.     addq.l    #1,a0
  118.     bra.s    8$
  119. 9$    movea.l    10(a2,d7.l),a1
  120.     jsr    (a1)
  121.  
  122. DMAreturn
  123.     move.w    8(a2,d7.l),d1
  124.     cmpi.b    #2,d1
  125.     bne.s    1$
  126.  
  127.     move.l    d0,rm_Result1(a3)
  128.     bra.s    DMAcleanup
  129.  
  130. 1$    cmpi.b    #1,d1
  131.     beq.s    2$
  132.     cmpi.b    #3,d1
  133.     bne.s    5$
  134.  
  135. 2$    btst    #1,rm_Action+1(a3)
  136.     bne.b    3$
  137.  
  138.     cmpi.b    #3,d1
  139.     bne.s    6$
  140.  
  141.     movea.l    d0,a0
  142.     jsr    _LVODeleteArgstring(a6)
  143.  
  144. 6$    moveq    #21,d0
  145.     move.l    d0,rm_Result1(a3)
  146.     bra.s    DMAcleanup
  147.  
  148. 3$    movea.l    d0,a0
  149.     cmpi.b    #3,d1
  150.     beq.s    4$
  151.  
  152.     move.l    a0,d0
  153.     beq.s    44$
  154.  
  155.     jsr    _LVOStrlen(a6)
  156. 44$    jsr    _LVOCreateArgstring(a6)
  157. 4$    move.l    a0,rm_Result2(a3)
  158.  
  159. 5$    clr.l    rm_Result1(a3)
  160.  
  161. DMAcleanup
  162.     movea.l    a3,a1
  163.     movea.l    _AbsExecBase.w,a6
  164.     jsr    _LVOReplyMsg(a6)
  165.  
  166.     movem.l    (sp)+,d5-d7/a2-a3/a6
  167.     unlk    a5
  168.     rts
  169.  
  170.     END
  171.